﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AccesoBD;
using System.Data.SqlClient;

namespace GAIA_Logica
{
    public class Segmento
    {
        #region Atributos
        /// <summary>
        /// Atributos de la clase
        /// </summary>
        /// 

        private int id;

        public int Id
        {
            get { return id; }
            set { id = value; }
        }
        private int tipo = 2;

        public int Tipo
        {
            get { return tipo; }
            set { tipo = value; }
        }
        private double tamano;

        public double Tamano
        {
            get { return tamano; }
            set { tamano = value; }
        }
        private Terreno terreno_padre;

        public Terreno Terreno_padre
        {
            get { return terreno_padre; }
            set { terreno_padre = value; }
        }
        private int habilitado = 1;

        public int Habilitado
        {
            get { return habilitado; }
            set { habilitado = value; }
        }

        private string nombre;

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        //Conexion a base de datos
        private AcessoBD dba = new AcessoBD(Properties.Settings.Default.GAIA_CON);

        #endregion

        #region Constructor
        public Segmento(double pTamano, string pNombre, int pid_terreno)
            {
                this.tamano = pTamano;
                this.nombre = pNombre;
                setTerreno(pid_terreno);
            }

            public Segmento(double pTamano, string pNombre)
            {
                this.tamano = pTamano;
                this.nombre = pNombre;
            }

            public Segmento() { 
            
            }
        #endregion

        #region Metodos
            public void setTerreno(int pid_terreno){
                Terreno_padre = new Terreno();
                Terreno_padre.getTerreno(pid_terreno);
            }

        //CRUD
            public bool ingresarSegmento() {
                bool result = false;

                string sqlQuery = "Insert into Segmentos (id_tipo,tamano,id_terreno,habilitado,nombre) values(param1,param2,param3,param4,param5)";

                try
                {
                    //Lista parametros
                    Parametros[] parametros = new Parametros[5];
                    parametros[0] = new Parametros(this.Tipo, "param1");
                    parametros[1] = new Parametros(this.Tamano, "param2");
                    parametros[2] = new Parametros(this.Terreno_padre.Id, "param3");
                    parametros[3] = new Parametros(this.Habilitado, "param4");
                    parametros[4] = new Parametros(this.Nombre, "param5");

                    //Ejecuta el query
                    result = dba.executeSQL(sqlQuery, parametros);
                }
                catch (Exception ex) {

                    throw new Exception("Ocurrio un error a la hroa de ingrear el segmento de terreno: " + ex.Message);
                }

                return result;
            }

            public bool actualizarSegmento() {

                bool result = false;

                string sqlQuery = "Update Segmentos set id_tipo=param1,tamano=param2,id_terreno=param3,habilitado=param4 where id="+this.Id;

                try
                {
                    //Lista parametros
                    Parametros[] parametros = new Parametros[3];
                    parametros[0] = new Parametros(this.Tipo, "param1");
                    parametros[1] = new Parametros(this.Tamano, "param2");
                    parametros[2] = new Parametros(this.Terreno_padre.Id, "param3");
                    parametros[3] = new Parametros(this.Id, "param4");

                    //Ejecuta el query
                    result = dba.executeSQL(sqlQuery, parametros);
                }
                catch (Exception ex)
                {

                    throw new Exception("Ocurrio un error a la hora de actualizar el segmento de terreno: " + ex.Message);
                }

                return result;
            
            }


            public bool borrarSegmento() {
                bool result = false;

                string sqlQuery = "Delete Segmentos where id=" + this.Id;

                try
                {
                    result = dba.executeSQL(sqlQuery, null);
                }
                catch (Exception ex) {
                    throw new Exception("Ocurrio un error a la hora de borrar el segemnto: " + ex.Message);
                }


                return result;
            }

            public void getSegmento(int pid) {

                string sqlQuery = "Select id,id_tipo,tamano,id_terreno,habilitado,nombre from Segmentos where id="+pid;

                try
                {
                    SqlDataReader rs = dba.execute_Consulta(sqlQuery, null);

                    if (rs != null && rs.Read()) {
                        Id = rs.GetInt32(rs.GetOrdinal("id"));
                        Tipo = rs.GetInt32(rs.GetOrdinal("id_tipo"));
                        Tamano = rs.GetDouble(rs.GetOrdinal("tamano"));
                        Habilitado = rs.GetInt32(rs.GetOrdinal("habilitado"));
                        //Obtiene el terreno padre
                        int id_terrenoPadre = rs.GetInt32(rs.GetOrdinal("id_terreno"));
                        Terreno_padre = new Terreno();
                        Terreno_padre.getTerreno(id_terrenoPadre);
                        Nombre = rs.GetString(rs.GetOrdinal("nombre"));
                    }

                }
                catch (Exception ex) {
                    throw new Exception("Ocurrio un error a la hora de obtener el segmento de terreno: " + ex.Message);
                }
            
            }

            public List<Segmento> getListaSegmentosTerreno(int pidTerreno) {

                List<Segmento> listaSegmentos = new List<Segmento>();
                string sqlQuery = "Select id,id_tipo,tamano,id_terreno,habilitado,nombre from Segmentos where id_terreno=" + pidTerreno;

                try {
                    SqlDataReader rs = dba.execute_Consulta(sqlQuery, null);

                    while (rs.Read()) {
                        Segmento objSeg = new Segmento();
                        objSeg.Id = rs.GetInt32(rs.GetOrdinal("id"));
                        objSeg.Tipo = rs.GetInt32(rs.GetOrdinal("id_tipo"));
                        objSeg.Tamano = rs.GetDouble(rs.GetOrdinal("tamano"));
                        objSeg.Habilitado = rs.GetInt32(rs.GetOrdinal("habilitado"));
                        objSeg.Nombre = rs.GetString(rs.GetOrdinal("nombre"));
                        //objSeg.terreno_padre.getTerreno(rs.GetInt32(rs.GetOrdinal("id_terreno")));
                        listaSegmentos.Add(objSeg);
                    }

                }catch(Exception ex){
                    throw new Exception("Ocurrio un error a la hora de listar los segmentos: "+ex.Message);
                }

                return listaSegmentos;
            }


        #endregion
    }
}
